iT邦幫忙

0

# Day 06|串聯自動化神經網絡 在 n8n 中調用 FastAPI 推薦端點與資料流轉

n8n
  • 分享至 

  • xImage
  •  

在昨天的文章中,我們使用 Pydantic 定義了嚴謹的美食推薦資料模型,並在 FastAPI 中實作了具備預算、料理分類與地區篩選邏輯的推薦端點(POST /api/v1/recommend/)。

現在,我們的後端微服務已經具備運算能力,但真實世界的使用情境通常不是由使用者手動去發 cURL 或開 Swagger 文件,而是透過對話介面或排程觸發。

今天的核心任務,就是讓 n8n 扮演智慧排程與自動化神經中樞的角色:學習如何在 n8n 中使用 HTTP Request 節點呼叫本地運行的 FastAPI,並完成資料格式的提取與動態映射!


一、架構連線觀念:Docker 容器如何連到本地端 FastAPI?

在開始配置節點之前,必須先釐清一個最容易踩雷的網路觀念:

  • FastAPI 運行位置:直接運行在 Windows 本機(或 WSL 2 終端機)的 http://localhost:8000。
  • n8n 運行位置:運行在 Docker 容器 內部。

⚠️ 關鍵注意:
如果你在 n8n 容器內部的 HTTP Request 節點填寫 http://localhost:8000,n8n 會以為你要連的是「n8n 容器自己本身」,進而拋出 ECONNREFUSED 連線拒絕錯誤!

解法:在 Docker 容器內部要存取宿主主機(Windows 本機)的連接埠時,必須將網址換成:

[http://host.docker.internal:8000](http://host.docker.internal:8000)

這是 Docker 內建專門用來解析宿主主機 IP 的特殊網域名稱。


二、建立 n8n 推薦串接工作流

打開瀏覽器進入 n8n 介面(http://localhost:5678),點擊右上角 Add workflow 建立一個新流程。

Step 1:新增手動觸發節點(When clicking 'Test workflow')

為了方便開發與除錯,我們先使用手動觸發節點:

  1. 點擊 Add first step。
  2. 搜尋並選擇 When clicking 'Test workflow'(或 Manual Trigger)。

Step 2:新增 Edit Fields (Set) 節點模擬使用者輸入

在真實場景中,這一步通常來自 LINE Bot 的訊息解析,這裡我們先用 Set 節點模擬傳入的參數:

  1. 點擊 + 新增節點,搜尋並選擇 Edit Fields (Set)。
  2. 命名為 Mock User Input。
  3. 新增以下欄位(Values to Set):
    • user_id(String):user_ironman_06
    • cuisine(String):甜點/下午茶
    • budget_max(Number):350
    • location(String):板橋
    • notes(String):想吃草莓戚風蛋糕

Step 3:新增 HTTP Request 節點呼叫 FastAPI

這是今天最關鍵的一步,讓 n8n 將上一節點的資料打包發送給 FastAPI:

  1. 點擊 + 新增節點,搜尋並選擇 HTTP Request。
  2. 節點參數設定如下:
    • Method:POST
    • URL:http://host.docker.internal:8000/api/v1/recommend/
    • Send Body:開啟(Toggle On)
    • Body Content Type:選擇 JSON
    • Specify Body:選擇 Using Fields Below(或切換至 JSON 模式)
  3. 在 Body 欄位中,使用 n8n 的運算式(Expression)將 Mock User Input 的欄位動態綁定進來:
    • user_id:{{ $json.user_id }}
    • cuisine:{{ $json.cuisine }}
    • budget_max:{{ $json.budget_max }}
    • location:{{ $json.location }}
    • notes:{{ $json.notes }}

💡 提示:直接從左側拖曳變數標籤到右側欄位,n8n 就會自動生成 {{ $json.xxx }} 運算式!


Step 4:新增 Code / Markdown 節點格式化推薦結果

FastAPI 回傳的資料是標準的 JSON 陣列,我們加上一個簡單的文字格式化節點,把餐廳資訊組合成適合發給使用者的親切訊息:

  1. 點擊 + 新增 Edit Fields (Set) 或 Code 節點。
  2. 設定一個輸出變數 reply_message,填入以下表達式:
    🎉 為您精選的美食推薦清單來囉!
    
    【推薦店家】:{{ $json.recommendations[0].name }}
    【分類】:{{ $json.recommendations[0].cuisine }}
    【平均消費】:約 {{ $json.recommendations[0].price_avg }} 元
    【所在位置】:{{ $json.recommendations[0].location }}
    【Google 評分】:⭐️ {{ $json.recommendations[0].rating }}
    【招牌必點】:{{ $json.recommendations[0].signature_dish }}
    【小編短評】:{{ $json.recommendations[0].reason }}
    

三、端到端執行與驗收測試

Step 1:確認 FastAPI 伺服器仍在運作

請確認你的 PowerShell 終端機中,FastAPI 仍然處於熱重載運作中:

uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

確保 --host 設定為 0.0.0.0,這樣才能接收來自 Docker 容器內部的連線請求。

Step 2:在 n8n 點擊「Test workflow」

回到 n8n 畫布,點擊下方的 Test workflow 按鈕:

1.連線狀態:所有節點依序亮起綠色勾勾。
2.FastAPI 終端機日誌:會立即印出一行成功連線的請求日誌:

INFO:     172.18.0.1:xxxxx - "POST /api/v1/recommend/ HTTP/1.1" 200 OK

3.輸出檢查:點開最後一個節點的 Output 面板,確認 reply_message 成功解析出「恬淡日常法式甜點」的精美格式化排版!

今天我們打通了自動化架構中最關鍵的一環:使用 n8n 作為橋樑,跨越容器與本地宿主機的網路邊界,精準調用 FastAPI 微服務!

現在我們的資料鏈路是:
輸入參數 ➜ n8n 流程排程 ➜ FastAPI 核心演算法/資料庫 ➜ 格式化輸出

明天 Day 07,我們將把前幾天在 Dify 設定好的 Google Gemini 大腦整合進來:在 n8n 中串接 Dify API,讓 AI 大腦自動解析使用者的自然語言對話,並動態提取出推薦參數! 敬請期待!


*提醒邦友,使用第三方服務/API 時,請務必評估資安風險與隱私保護
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言